package cn.iocoder.yudao.module.contract.service.invoice;

import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.contract.controller.admin.invoice.vo.*;
import cn.iocoder.yudao.module.contract.dal.dataobject.invoice.InvoiceDO;
import cn.iocoder.yudao.module.contract.dal.dataobject.invoice.InvoiceDetailsDO;
import cn.iocoder.yudao.module.contract.dal.dataobject.invoice.InvoiceOrdersDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.module.contract.dal.dataobject.order.OrderDO;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * 发票 Service 接口
 *
 * @author 管理员
 */
public interface InvoiceService extends IService<InvoiceDO> {


    /**
     * 获得发票
     *
     * @param id 编号
     * @return 发票
     */
    InvoiceDO getInvoice(Long id);

    /**
     * 获得发票分页
     *
     * @param pageReqVO 分页查询
     * @return 发票分页
     */
    PageResult<InvoicePageRespVO> getInvoicePage(InvoicePageReqVO pageReqVO);

    // ==================== 子表（发票明细） ====================

    /**
     * 获得发票明细分页
     *
     * @param pageReqVO 分页查询
     * @param zskpId 发票id
     * @return 发票明细分页
     */
    PageResult<InvoiceDetailsDO> getInvoiceDetailsPage(PageParam pageReqVO, String zskpId);

	/**
	 * 获得发票明细
	 *
	 * @param id 编号
     * @return 发票明细
	 */
    InvoiceDetailsDO getInvoiceDetails(Long id);

    // ==================== 子表（发票订单信息） ====================

    /**
     * 获得发票订单信息分页
     *
     * @param pageReqVO 分页查询
     * @param ddSqkpRecordId 关联订单ID
     * @return 发票订单信息分页
     */
    PageResult<InvoiceOrdersDO> getInvoiceOrdersPage(PageParam pageReqVO, String ddSqkpRecordId);

	/**
	 * 获得发票订单信息
	 *
	 * @param id 编号
     * @return 发票订单信息
	 */
    InvoiceOrdersDO getInvoiceOrders(Long id);

    String invoiceSync(String startDate, String endDate);

    String generateContract(GenerateContractVO generateContractVO);

    String invoiceStatusPush(List<InvoiceDO> invoiceList,String status);
}